package cn.com.surker.thread;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 现场相关数据
 *
 * @author luotao
 * @date 2025/6/13
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class ThreadData {

	public ThreadData() {
	}

	public ThreadData(long id, String name, Thread.State state) {
		this.id = id;
		this.name = name;
		this.state = state;
	}

	/**
	 * 线程id
	 */
	private Long id;

	/**
	 * 线程名
	 */
	private String name;


	/**
	 *
	 * NEW：Thread 对象创建好了，但还没有调用 start 方法在系统中创建线程
	 * RUNNABLE：就绪状态，表示该线程正在 CPU 上执行，或准备就绪随时可以去 CPU 上执行
	 * BLOCKED：由于锁竞争引起的阻塞
	 * WAITING：不带时间的阻塞（死等），必须满足一定的条件，才会解除阻塞
	 * TIMED_WAITING：指定时间的阻塞，到达一定时间之后自动解除阻塞
	 * TERMINATED：Thread 对象仍然存在，但系统内部的线程已经执行完毕了
	 *
	 */
	/**
	 * 线程状态
	 */
	private Thread.State state;


	/**
	 * 线程状态
	 */
	private String stateText;


	public String getStateText() {
		Thread.State state = getState();
		if (state == null) {
			return "";
		}
		stateText = "";
		switch (state) {
			case NEW:
				stateText = "创建完成";
				break;
			case RUNNABLE:
				stateText = "就绪";
				break;
			case BLOCKED:
				stateText = "由于锁竞争引起的阻塞";
				break;
			case WAITING:
				stateText = "不带时间的阻塞（死等），必须满足一定的条件，才会解除阻塞";
				break;
			case TIMED_WAITING:
				stateText = "指定时间的阻塞，到达一定时间之后自动解除阻塞";
				break;
			case TERMINATED:
				stateText = "对象仍然存在，但系统内部的线程已经执行完毕了";
				break;
			default:
				stateText = "";
		}
		return stateText;
	}
}
